# Author: wyq
# 递归
# 最大递归层次 999

# 求 偶数
def calc(n):
    print(n)
    if n>0 :
        return calc(n-2)

calc(100)
# 递归必须有一个明确的结束条件
# 每次进入更深入的一层次的递归时，问题的规模要相对上次的递归应有减少
# 递归效率不高，递归层次过多会导致栈溢出。

def calc2(n):
    print("---",n)
    if int(n/2)>0:
        return calc2(int(n/2))
    print("->->",n)

calc2(10)

# 高阶函数
# a :把一个函数名当做实参传给另外一个函数
# b :返回值中包含函数名
def add(a,b,f):
    return f(a)+f(b)

rs = add(3,-6,abs)

print("-------->",rs)

import time
def bar():
    time.sleep(3)
    print('in the bar')
def test2(func):
    print(func)
    return  func

# print(test2(bar))
# 这样test2就可以在不修改函数的调用方式 给函数添加了新的功能
bar = test2(bar)
bar()

# 嵌套函数
# 在一个函数体内 用def去声明一个函数
def test5 ():
    print('in the foo')
    def bar():
        print('in the bar')
    bar()
test5()